﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LeksickiAnalizator
{
    /// <summary>
    /// Tablica znakova
    /// </summary>
    public class TablicaIzvornihZnakova
    {
        private List<ZapisTabliceIzvornihZnakova> tablicaIzvornihZnakova = new List<ZapisTabliceIzvornihZnakova>();

        /// <summary>
        /// U tablicu pokušava dodati znak. Ako znak već postoji u tablici
        /// vraća ga. Ako ne postoji dodaje novi i vraća njega.
        /// </summary>
        /// <param name="znak">znak koja se pokušava spremiti</param>
        /// <returns>spremljen izvorni znak</returns>
        public ZapisTabliceIzvornihZnakova DodajZnak(ZapisTabliceIzvornihZnakova znak)
        {
            var spremljeno = from s in tablicaIzvornihZnakova
                             where (s.IzvorniTekst.Equals(znak.IzvorniTekst) && s.UniformniZnak.Equals(znak.UniformniZnak))
                             select s;
            if (spremljeno.Count() > 0)
            {
                return spremljeno.First();
            }
            else
            {
                znak.Indeks = tablicaIzvornihZnakova.Count;
                tablicaIzvornihZnakova.Add(znak);
                return znak;
            }

        }

        /// <summary>
        /// Dohvaća tablicu izvornih znakova
        /// </summary>
        /// <returns>enumeracija izvornih znakova</returns>
        public IEnumerable<ZapisTabliceIzvornihZnakova> DohvatiIzvorneZnakove()
        {
            foreach (var znak in tablicaIzvornihZnakova)
            {
                yield return znak;
            }
        }
    }

    /// <summary>
    /// Predstavlja zapis u tablici izvornih znakova
    /// </summary>
    public class ZapisTabliceIzvornihZnakova
    {
        /// <summary>
        /// Redni broj u tablici znakova
        /// </summary>
        public int Indeks { get; set; }

        /// <summary>
        /// Izvorni tekst
        /// </summary>
        public string IzvorniTekst { get; set; }

        /// <summary>
        /// Uniformni znak danog izvornog znaka
        /// </summary>
        public string UniformniZnak { get; set; }
    }
}
